From cdd5407adcdb1062f34fec4e433f3ba57bf838ee Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 20 Dec 2006 04:27:45 +0000 Subject: [PATCH] backport functions.sh from kamikaze SVN-Revision: 5871 --- .../base-files/default/etc/functions.sh | 158 +++++++++++++----- 1 file changed, 120 insertions(+), 38 deletions(-) diff --git a/openwrt/package/base-files/default/etc/functions.sh b/openwrt/package/base-files/default/etc/functions.sh index 55464f72a0..6278a0fe28 100755 --- a/openwrt/package/base-files/default/etc/functions.sh +++ b/openwrt/package/base-files/default/etc/functions.sh @@ -2,12 +2,6 @@ # Copyright (C) 2006 OpenWrt.org # Copyright (C) 2006 Fokus Fraunhofer -# newline -N=" -" - -_C=0 - alias debug=${DEBUG:-:} # valid interface? @@ -97,80 +91,168 @@ do_ifup() { esac } +# newline +N=" +" + +_C=0 + +hotplug_dev() { + env -i ACTION=$1 INTERFACE=$2 /sbin/hotplug net +} + append() { local var="$1" local value="$2" local sep="${3:- }" - eval "export ${var}=\"\${${var}:+\${${var}}${value:+$sep}}\$value\"" + + eval "export -n -- \"$var=\${$var:+\${$var}\${value:+\$sep}}\$value\"" } reset_cb() { - config_cb() { - return 0 - } - option_cb() { - return 0 - } + config_cb() { return 0; } + option_cb() { return 0; } } reset_cb config () { - local cfgtype="$1" - local name="$2" - _C=$(($_C + 1)) - name="${name:-cfg${_C}}" - config_cb "$cfgtype" "$name" - export CONFIG_SECTION="$name" - export CONFIG_${CONFIG_SECTION}_TYPE="$cfgtype" + local cfgtype="$1" + local name="$2" + + CONFIG_NUM_SECTIONS=$(($CONFIG_NUM_SECTIONS + 1)) + name="${name:-cfg$CONFIG_NUM_SECTIONS}" + append CONFIG_SECTIONS "$name" + config_cb "$cfgtype" "$name" + CONFIG_SECTION="$name" + export -n "CONFIG_${CONFIG_SECTION}_TYPE=$cfgtype" } option () { local varname="$1"; shift - export CONFIG_${CONFIG_SECTION}_${varname}="$*" + local value="$*" + + export -n "CONFIG_${CONFIG_SECTION}_${varname}=$value" option_cb "$varname" "$*" } +config_rename() { + local OLD="$1" + local NEW="$2" + local oldvar + local newvar + + [ "$OLD" -a "$NEW" ] || return + for oldvar in `set | grep ^CONFIG_${OLD}_ | \ + sed -e 's/\(.*\)=.*$/\1/'` ; do + newvar="CONFIG_${NEW}_${oldvar##CONFIG_${OLD}_}" + eval "export -n \"$newvar=\${$oldvar}\"" + unset "$oldvar" + done + CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , $NEW ,")" + + [ "$CONFIG_SECTION" = "$OLD" ] && CONFIG_SECTION="$NEW" +} + +config_unset() { + config_set "$1" "$2" "" +} + config_clear() { - [ -z "$CONFIG_SECTION" ] && return - for oldsetting in `set | grep ^CONFIG_${CONFIG_SECTION}_ | \ + local SECTION="$1" + local oldvar + + CONFIG_SECTIONS="$(echo " $CONFIG_SECTIONS " | sed -e "s, $OLD , ,")" + CONFIG_SECTIONS="${SECTION:+$CONFIG_SECTIONS}" + + for oldvar in `set | grep ^CONFIG_${SECTION:+$SECTION_} | \ sed -e 's/\(.*\)=.*$/\1/'` ; do - unset $oldsetting + unset $oldvar done - unset CONFIG_SECTION } config_load() { - CONFIG_SECTION= - local DIR="./" + local file="/etc/config/$1" _C=0 - [ \! -e "$1" -a -e "/etc/config/$1" ] && { - DIR="/etc/config/" - } - [ -e "$DIR$1" ] && { - CONFIG_FILENAME="$DIR$1" - . ${CONFIG_FILENAME} + CONFIG_SECTIONS= + CONFIG_NUM_SECTIONS=0 + CONFIG_SECTION= + + [ -e "$file" ] && { + . $file } || return 1 - ${CD:+cd -} >/dev/null + ${CONFIG_SECTION:+config_cb} } config_get() { case "$3" in - "") eval "echo \${CONFIG_${1}_${2}}";; - *) eval "$1=\"\${CONFIG_${2}_${3}}\"";; + "") eval "echo \"\${CONFIG_${1}_${2}}\"";; + *) eval "export -n -- \"$1=\${CONFIG_${2}_${3}}\"";; esac } config_set() { - export CONFIG_${1}_${2}="${3}" + local section="$1" + local option="$2" + local value="$3" + export -n "CONFIG_${section}_${option}=$value" +} + +config_foreach() { + local function="$1" + local section + + [ -z "$CONFIG_SECTIONS" ] && return 0 + for section in ${CONFIG_SECTIONS}; do + eval "$function \"\$section\"" + done +} + +load_modules() { + cd /etc/modules.d + sed 's/^[^#]/insmod &/' $* | ash 2>&- || : } include() { - for file in $(ls /lib/$1/*.sh 2>/dev/null); do + local file + + for file in $(ls $1/*.sh 2>/dev/null); do . $file done } +find_mtd_part() { + local PART="$(grep "\"$1\"" /proc/mtd | awk -F: '{print $1}')" + + PART="${PART##mtd}" + echo "${PART:+/dev/mtdblock/$PART}" +} + +strtok() { # { [] ... } + local tmp + local val="$1" + local count=0 + + shift + + while [ $# -gt 1 ]; do + tmp="${val%%$2*}" + + [ "$tmp" = "$val" ] && break + + val="${val#$tmp$2}" + + export -n "$1=$tmp"; count=$((count+1)) + shift 2 + done + + if [ $# -gt 0 -a "$val" ]; then + export -n "$1=$val"; count=$((count+1)) + fi + + return $count +} + set_led() { local led="$1" local state="$2" -- 2.30.2